package com.pureman.androidapp.utils;

import android.Manifest;
import android.app.ActivityManager;
import android.app.KeyguardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.PowerManager;
import android.provider.Contacts;
import android.support.v4.app.ActivityCompat;
import android.text.TextUtils;

import java.io.File;
import java.util.List;

/**
 * Created by Administrator on 2016/7/19 0019.
 */
public class IntentUtil {

    /**
     * 拨打电话
     *
     * @param context
     * @param phoneNumber
     */
    public static void call(Context context, String phoneNumber) {
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)));
    }

    /**
     * 跳转至拨号界面
     *
     * @param context
     * @param phoneNumber
     */
    public static void callDial(Context context, String phoneNumber) {
        context.startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber)));
    }

    /**
     * 发送短信
     *
     * @param context
     * @param phoneNumber
     * @param content
     */
    public static void sendSms(Context context, String phoneNumber,
                               String content) {
        Uri uri = Uri.parse("smsto:"
                + (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber));
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        intent.putExtra("sms_body", TextUtils.isEmpty(content) ? "" : content);
        context.startActivity(intent);
    }

    /**
     * 唤醒屏幕并解锁
     * <p/>
     * <uses-permission android:name="android.permission.WAKE_LOCK" />
     * <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
     *
     * @param context
     */
    public static void wakeUpAndUnlock(Context context) {
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
        //解锁
        kl.disableKeyguard();
        //获取电源管理器对象
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
        //点亮屏幕
        wl.acquire();
        //释放
        wl.release();
    }

    /**
     * 判断当前App处于前台还是后台状态
     * <p/>
     * <uses-permission android:name="android.permission.GET_TASKS" />
     *
     * @param context
     * @return
     */
    public static boolean isApplicationBackground(final Context context) {
        ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        @SuppressWarnings("deprecation")
        List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断当前手机是否处于锁屏(睡眠)状态
     *
     * @param context
     * @return
     */
    public static boolean isSleeping(Context context) {
        KeyguardManager kgMgr = (KeyguardManager) context
                .getSystemService(Context.KEYGUARD_SERVICE);
        boolean isSleeping = kgMgr.inKeyguardRestrictedInputMode();
        return isSleeping;
    }

    /**
     * 安装APK
     *
     * @param context
     * @param file
     */
    public static void installApk(Context context, File file) {
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setType("application/vnd.android.package-archive");
        intent.setDataAndType(Uri.fromFile(file),
                "application/vnd.android.package-archive");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * 检测某程序是否安装
     */
    public static boolean isInstalledApp(Context context, String packageName) {
        Boolean flag = false;

        try {
            PackageManager pm = context.getPackageManager();
            List<PackageInfo> pkgs = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
            for (PackageInfo pkg : pkgs) {
                // 当找到了名字和该包名相同的时候，返回
                if ((pkg.packageName).equals(packageName)) {
                    return flag = true;
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return flag;
    }

    /**
     * 安装.apk文件
     *
     * @param context
     */
    public void install(Context context, String fileName) {
        if (TextUtils.isEmpty(fileName) || context == null) {
            return;
        }
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(android.content.Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 安装.apk文件
     *
     * @param context
     */
    public void install(Context context, File file) {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

//    1.从google搜索内容
//    Intent intent = new Intent();
//    intent.setAction(Intent.ACTION_WEB_SEARCH);
//    intent.putExtra(SearchManager.QUERY,"searchString")
//    startActivity(intent);
//
//    2.浏览网页
//    Uri uri = Uri.parse("http://www.google.com");
//    Intent it  = new Intent(Intent.ACTION_VIEW,uri);
//    startActivity(it);
//
//    3.显示地图
//    Uri uri = Uri.parse("geo:38.899533,-77.036476");
//    Intent it = new Intent(Intent.Action_VIEW,uri);
//    startActivity(it);
//
//    4.路径规划
//    Uri uri = Uri.parse("http://maps.google.com/maps?f=dsaddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
//    Intent it = new Intent(Intent.ACTION_VIEW,URI);
//    startActivity(it);
//    5.拨打电话
//    Uri uri = Uri.parse("tel:xxxxxx");
//    Intent it = new Intent(Intent.ACTION_DIAL, uri);
//    startActivity(it);
//
//    6.调用发短信的程序
//    Intent it = new Intent(Intent.ACTION_VIEW);
//    it.putExtra("sms_body", "The SMS text");
//    it.setType("vnd.android-dir/mms-sms");
//    startActivity(it);
//
//    7.发送短信
//    Uri uri = Uri.parse("smsto:0800000123");
//    Intent it = new Intent(Intent.ACTION_SENDTO, uri);
//    it.putExtra("sms_body", "The SMS text");
//    startActivity(it);
//    String body="this is sms demo";
//    Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("smsto", number, null));
//    mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
//    mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);
//    mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);
//    startActivity(mmsintent);
//
//    8.发送彩信
//    Uri uri = Uri.parse("content://media/external/images/media/23");
//    Intent it = new Intent(Intent.ACTION_SEND);
//    it.putExtra("sms_body", "some text");
//    it.putExtra(Intent.EXTRA_STREAM, uri);
//    it.setType("image/png");
//    startActivity(it);
//    StringBuilder sb = new StringBuilder();
//    sb.append("file://");
//    sb.append(fd.getAbsoluteFile());
//    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mmsto", number, null));
//// Below extra datas are all optional.
//    intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);
//    intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
//    intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());
//    intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);
//    intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);
//    startActivity(intent);
//
//    9.发送Email
//    Uri uri = Uri.parse("mailto:xxx@abc.com");
//    Intent it = new Intent(Intent.ACTION_SENDTO, uri);
//    startActivity(it);
//    Intent it = new Intent(Intent.ACTION_SEND);
//    it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
//    it.putExtra(Intent.EXTRA_TEXT, "The email body text");
//    it.setType("text/plain");
//    startActivity(Intent.createChooser(it, "Choose Email Client"));
//    Intent it=new Intent(Intent.ACTION_SEND);
//    String[] tos={"me@abc.com"};
//    String[] ccs={"you@abc.com"};
//    it.putExtra(Intent.EXTRA_EMAIL, tos);
//    it.putExtra(Intent.EXTRA_CC, ccs);
//    it.putExtra(Intent.EXTRA_TEXT, "The email body text");
//    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
//    it.setType("message/rfc822");
//    startActivity(Intent.createChooser(it, "Choose Email Client"));
//
//    Intent it = new Intent(Intent.ACTION_SEND);
//    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
//    it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
//    sendIntent.setType("audio/mp3");
//    startActivity(Intent.createChooser(it, "Choose Email Client"));
//    10.播放多媒体
//    Intent it = new Intent(Intent.ACTION_VIEW);
//    Uri uri = Uri.parse("file:///sdcard/song.mp3");
//    it.setDataAndType(uri, "audio/mp3");
//    startActivity(it);
//    Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
//    Intent it = new Intent(Intent.ACTION_VIEW, uri);
//    startActivity(it);
//
//    11.uninstall apk
//    Uri uri = Uri.fromParts("package", strPackageName, null);
//    Intent it = new Intent(Intent.ACTION_DELETE, uri);
//    startActivity(it);
//
//    12.install apk
//    Uri installUri = Uri.fromParts("package", "xxx", null);
//    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
//    13. 打开照相机
//            <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
//    this.sendBroadcast(i);
//    <2>long dateTaken = System.currentTimeMillis();
//    String name = createName(dateTaken) + ".jpg";
//    fileName = folder + name;
//    ContentValues values = new ContentValues();
//    values.put(Images.Media.TITLE, fileName);
//    values.put("_data", fileName);
//    values.put(Images.Media.PICASA_ID, fileName);
//    values.put(Images.Media.DISPLAY_NAME, fileName);
//    values.put(Images.Media.DESCRIPTION, fileName);
//    values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
//    Uri photoUri = getContentResolver().insert(
//            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//
//    Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//    inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
//    startActivityForResult(inttPhoto, 10);
//
//    14.从gallery选取图片
//    Intent i = new Intent();
//    i.setType("image/*");
//    i.setAction(Intent.ACTION_GET_CONTENT);
//    startActivityForResult(i, 11);
//    15. 打开录音机
//    Intent mi = new Intent(Media.RECORD_SOUND_ACTION);
//    startActivity(mi);
//
//    16.显示应用详细列表
//    Uri uri = Uri.parse("market://details?id=app_id");
//    Intent it = new Intent(Intent.ACTION_VIEW, uri);
//    startActivity(it);
////where app_id is the application ID, find the ID
////by clicking on your application on Market home
////page, and notice the ID from the address bar
//
//    刚才找app id未果，结果发现用package name也可以
//    Uri uri = Uri.parse("market://details?id=<packagename>");
//    这个简单多了
//
//    17寻找应用
//    Uri uri = Uri.parse("market://search?q=pname:pkg_name");
//    Intent it = new Intent(Intent.ACTION_VIEW, uri);
//    startActivity(it);
////where pkg_name is the full package path for an application
//
//    18打开联系人列表
//            <1>
//    Intent i = new Intent();
//    i.setAction(Intent.ACTION_GET_CONTENT);
//    i.setType("vnd.android.cursor.item/phone");
//    startActivityForResult(i, REQUEST_TEXT);
//
//    <2>
//    Uri uri = Uri.parse("content://contacts/people");
//    Intent it = new Intent(Intent.ACTION_PICK, uri);
//    startActivityForResult(it, REQUEST_TEXT);
//
//    19 打开另一程序
//    Intent i = new Intent();
//    ComponentName cn = new ComponentName("com.yellowbook.android2",
//            "com.yellowbook.android2.AndroidSearch");
//    i.setComponent(cn);
//    i.setAction("android.intent.action.MAIN");
//    startActivityForResult(i, RESULT_OK);
//
//
//    20.调用系统编辑添加联系人（高版本SDK有效）：
//    Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);
//    it.setType("vnd.android.cursor.item/contact");
//    //it.setType(Contacts.CONTENT_ITEM_TYPE);
//    it.putExtra("name","myName");
//    it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY,  "organization");
//    it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");
//    it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");
//    it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,
//            "mobilePhone");
//    it.putExtra(  android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,
//            "workPhone");
//    it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");
//    startActivity(it);
//
//    21.调用系统编辑添加联系人（全有效）：
//    Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);
//    intent.setType(People.CONTENT_ITEM_TYPE);
//    intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");
//    intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");
//    intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);
//    intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");
//    intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE,                    Contacts.ContactMethodsColumns.TYPE_WORK);
//    startActivity(intent);
}
